12.2 工具
本节介绍常用内置工具的使用方法及参数含义。
go build
此命令默认每次都会重新编译除标准库以外的所有依赖包。
参数 说明 示例 ------------------+-------------------------------------------+-------------- -o 可执行文件名(默认与目录同名) -a 强制重新编译所有包(含标准库) -p 并行编译所使用的CPU核数量 -v 显示待编译包名字 -n 仅显示编译命令,但不执行 -x 显示正在执行的编译命令 -work 显示临时工作目录,完成后不删除 -race 启动数据竞争检查(仅支持amd64) -gcflags 编译器参数 -ldflags 链接器参数
gcflags:
参数 说明 示例 ------------------+-------------------------------------------+---------- -B 禁用越界检查 -N 禁用优化 -l 禁用内联 -u 禁用unsafe -S 输出汇编代码 -m 输出优化信息
ldflags:
参数 说明 示例 ------------------+-------------------------------------------+---------- -s 禁用符号表 -w 禁用DRAWF调试信息 -X 设置字符串全局变量值 -X ver=“0.99” -H 设置可执行文件格式 -H windowsgui
更多参数:go tool compile-h; go tool link-h。或者到src/cmd/compile或link目录阅读doc.go。
go install
和build参数相同,但会将编译结果安装到bin、pkg目录。最关键的是,go install支持增量编译,在没有修改的情况下,会直接链接pkg目录中的静态包。
编译器用buildid检查文件清单和导入依赖,对比现有静态库和所有源文件修改时间来判断源码是否变化,以此来决定是否需要对包进行重新编译。至于buildid算法,实现起来很简单:将包的全部文件名,运行时版本号,所有导入的第三方包信息(路径、buildid)数据合并后哈希。
算法源码请阅读src/cmd/go/pkg.go。
go get
将第三方包下载(check out)到GOPATH列表的第一个工作空间。默认不会检查更新,须使用“-u”参数。
参数 说明 示例 ------------------+-------------------------------------------+---------- -d 仅下载,不安装 -u 更新包,包括其依赖项 -f 和 -u配合,强制更新,不检查是否过期 -t 下载测试代码所需的依赖包 -insecure 使用HTTP等非安全协议 -v 输出详细信息 -x 显示正在执行的命令
go env
显示全部或指定环境参数。
$go env
GOARCH=“amd64” GOBIN="" GOEXE="" GOHOSTARCH=“amd64” GOHOSTOS=“darwin” GOOS=“darwin” GOPATH="" GORACE="" GOROOT=“/usr/local/go” GOTOOLDIR=“/usr/local/go/pkg/tool/darwin_amd64” GO15VENDOREXPERIMENT=“1” CC=“clang” GOGCCFLAGS=“-fPIC-m64-pthread-fno-caret-diagnostics-Qunused-arguments” CXX=“clang++” CGO_ENABLED=“1”
$go env GOROOT /usr/local/go
go clean
清理工作目录,删除编译和安装遗留的目标文件。
参数 说明 示例 ------------------+-------------------------------------------+---------- -i 清理go install安装的文件 -r 递归清理所有依赖包 -x 显示正在执行的清理命令 -n 仅显示清理命令,但不执行